#!/usr/bin/env fish

if not type -q fastfetch
    exit
end

complete -c fastfetch -f

function __fastfetch_complete_bool
    echo -e "true\tBool"
    echo -e "false\tBool"
end

function __fastfetch_complete_color
    echo -e "black\tColor"
    echo -e "red\tColor"
    echo -e "green\tColor"
    echo -e "yellow\tColor"
    echo -e "blue\tColor"
    echo -e "magenta\tColor"
    echo -e "cyan\tColor"
    echo -e "white\tColor"
    echo -e "default\tColor"
end

function __fastfetch_complete_command
    for line in (fastfetch --list-modules autocompletion)
        set -l pair (string split -m 2 : $line)
        set -l module (string lower $pair[1])

        echo -e "$module-format\tModule format"
    end
    echo -e "format\tCustom format"
    echo -e "color\tColor format"
end

function __fastfetch_complete_config
    for line in (fastfetch --list-presets autocompletion)
        echo -e "$line\tPreset"
    end
    echo -e "none\tDisable loading config file"
end

function __fastfetch_complete_logo
    for line in (fastfetch --list-logos autocompletion)
        echo -e "$line\tBuiltin logo"
    end
    echo -e "none\tDon't print logo"
    echo -e "small\tPrint small ascii logo if available"
end

function __fastfetch_complete_structure
    for line in (fastfetch --list-modules autocompletion)
        set -l pair (string split -m 2 : $line)
        echo -e "$pair[1]\t$pair[2]"
    end
end

string match -r -a -g "^###> ?(.*)" < (status -f) | string collect | python3 | source

###> #!/usr/bin/env python3
###>
###> import json, subprocess, sys
###>
###> def main():
###>     data: dict[str, list[dict]] = json.loads(subprocess.check_output(['fastfetch', '--help-raw']))
###>
###>     for key in data:
###>         for flag in data[key]:
###>             if flag.get('pseudo', False):
###>                 continue
###>
###>             command_prefix: str = f'complete -c fastfetch -d "{flag["desc"]}" -l "{flag["long"]}"';
###>             if 'short' in flag:
###>                 command_prefix += f' -o "{flag["short"]}"'
###>
###>             if 'arg' in flag:
###>                 type: str = flag['arg']['type'];
###>                 if type == 'bool':
###>                     print(f'{command_prefix} -x -a "(__fastfetch_complete_bool)"')
###>                 elif type == 'color':
###>                     print(f'{command_prefix} -x -a "(__fastfetch_complete_color)"')
###>                 elif type == 'command':
###>                     print(f'{command_prefix} -x -a "(__fastfetch_complete_command)"')
###>                 elif type == 'config':
###>                     print(f'{command_prefix} -x -a "(__fastfetch_complete_config)"')
###>                 elif type == 'enum':
###>                     temp: str = ' '.join(map(lambda x: f"{x[0]}\\t{x[1]}", flag["arg"]["enum"].items()))
###>                     print(f'{command_prefix} -x -a "{temp}"')
###>                 elif type == 'logo':
###>                     print(f'{command_prefix} -x -a "(__fastfetch_complete_logo)"')
###>                 elif type == 'structure':
###>                     print(f'{command_prefix} -x -a "(__fish_complete_list : __fastfetch_complete_structure)"')
###>                 elif type == 'path':
###>                     print(f'{command_prefix} -r -F')
###>                 else:
###>                     print(f'{command_prefix} -x')
###>             else:
###>                 print(f'{command_prefix} -f')
###>
###> if __name__ == "__main__":
###>     try:
###>         main()
###>     except:
###>         sys.exit(1)
###>
